/*============================================================================*/
/*                   Tortoise Team					                          */
/*============================================================================*/
/*                        OBJECT SPECIFICATION                                */
/*============================================================================*
* name:            HAL_Knob.c
* version:         1.0
* created_by:      Andres Torres Garcia
* date_created:    Sunday May 20 13:41:01 2012 %
*=============================================================================*/
/* DESCRIPTION : Source file for Abstraction layer for KNOB                   */
/*============================================================================*/
/* FUNCTION COMMENT : Describes the functions for Abstraction Layer for KNOB  */
/*                                                                            */
/*============================================================================*/
/*                               OBJECT HISTORY                               */
/*============================================================================*/
/*  REVISION |   DATE      |                               |      AUTHOR      */
/*----------------------------------------------------------------------------*/
/*  1.0      | 25/05/2012 |                               | Andres Torres     */
/*============================================================================*/

/* Includes */
/* -------- */
#include "stdtypedef.h"
#include "MAL_IOAPI.h"
#include "MAL_ADC.h"

/* Exported functions prototypes */
/* ----------------------------- */
void KNOB_Init(void);
void KNOB_SendReadRequest(void);
T_UWORD KNOB_GetKnobValue(void);
bool KNOB_ReadDone(void);


/* Exported functions */
/* ------------------ */
/**************************************************************
 *  Name                 :	KNOB_Init
 *  Description          :	Init all the hardware for the POT (potentiometer)
 *  Parameters           :  [Input, Output, Input / output]
 *  Return               :	void
 *  Critical/explanation :    No
 **************************************************************/
///////////////////////////////////////////////////////////////////////
/// \brief Init all the hardware for the POT (potentiometer)
/////////////////////////////////////////////////////////////////////////
void KNOB_Init(void)
{
	vfnConfigPinAs_ADC_Channel(pin_PF0);
	vfnConfig_ADC_Mode(SCAN);
	vfnJustifiedADCread(RIGHT);
	vfnSetChannelsInjected( 1, 0x0100 );
	vfnSetConvertionTime( 1, _32_MHz );
}

/**************************************************************
 *  Name                 :	KNOB_SendReadRequest
 *  Description          :	Start reading the knob
 *  Parameters           :  [Input, Output, Input / output]
 *  Return               :	void
 *  Critical/explanation :    No
 **************************************************************/
///////////////////////////////////////////////////////////////////////
/// \brief Start reading the knob
/////////////////////////////////////////////////////////////////////////
void KNOB_SendReadRequest(void)
{
	vfnADC_StartConvertion();
}

/**************************************************************
 *  Name                 :	KNOB_GetKnobValue
 *  Description          :	Get the current value of the knob
 *  Parameters           :  [Input, Output, Input / output]
 *  Return               :	The value of the knob
 *  Critical/explanation :    No
 **************************************************************/
///////////////////////////////////////////////////////////////////////
/// \brief Get the current value of the knob
/// \return Knob_Value Knob value
/////////////////////////////////////////////////////////////////////////
T_UWORD KNOB_GetKnobValue(void)
{
	return ADCReadValue(ANS_8);
}

/**************************************************************
 *  Name                 :	KNOB_ReadDone
 *  Description          :	Check if the reading is done
 *  Parameters           :  [Input, Output, Input / output]
 *  Return               :	True if it's done, otherwise false
 *  Critical/explanation :    No
 **************************************************************/
///////////////////////////////////////////////////////////////////////
/// \brief Check if the reading is done
/// \return IsReadingDone True is reading done, otherwise false
/////////////////////////////////////////////////////////////////////////
bool KNOB_ReadDone(void)
{
	return ADCConvertionComplete(ANS_8);
}